Strux

Ein Editor für Struktogramme und Programmablaufpläne

von Andreas Günther

Version 1.02 14.10.93

Inhaltsverzeichnis

1 Einleitung 5 1.1 Über dieses Handbuch . . . . . . . . . . . . . . . . . . . . . 6 1.2 Registrierung . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Danksagungen . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 Warenzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Vorbereitung zum Start 9 2.1 Hardwareanforderungen . . . . . . . . . . . . . . . . . . . . 9 2.2 Installation auf Festplatte oder Diskette . . . . . . . . . . . 9 2.3 Sicherungskopie . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Bedienung des Programms 11

3.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.1 Start . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.2 Verlassen des Programms . . . . . . . . . . . . . . . 11 3.1.3 Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.4 Menüs . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.5 Laden eines Projekts . . . . . . . . . . . . . . . . . . 12 3.1.6 Darstellungsarten . . . . . . . . . . . . . . . . . . . . 13 3.1.7 Auswahl eines Blocks . . . . . . . . . . . . . . . . . 13

3.2 Der Zwischenspeicher (Clipboard) . . . . . . . . . . . . . . 14 3.2.1 Ausschneiden . . . . . . . . . . . . . . . . . . . . . . 15 3.2.2 Kopieren . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.3 Einfügen . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.4 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.5 Markieren . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.6 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.7 Laden und Speichern des Zwischenspeichers . . . . . 19 3.2.8 Löschen von Blöcken oder Bereichen . . . . . . . . . 19 3.2.9 Nummer des Zwischenspeichers . . . . . . . . . . . . 19 3.3 Erstellen eines Diagramms . . . . . . . . . . . . . . . . . . . 20

3.3.1 Neues Projekt . . . . . . . . . . . . . . . . . . . . . . 20 3.3.2 Hinzufügen neuer Blöcke . . . . . . . . . . . . . . . . 20

3.4 Änderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.4.1 Textänderung . . . . . . . . . . . . . . . . . . . . . . 22 3.4.2 Typänderung . . . . . . . . . . . . . . . . . . . . . . 22

3.5 Verfeinerungen . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.5.1 Block verfeinern . . . . . . . . . . . . . . . . . . . . 23 3.5.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.5.3 Verfeinerungen markieren . . . . . . . . . . . . . . . 24 3.5.4 Hauptverfeinerung setzen . . . . . . . . . . . . . . . 25 3.5.5 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.5.6 Verfeinerungen in ”Subroutine“s umwandeln …. 26

3.6 Laden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.6.1 Laden von Strux-Dateien . . . . . . . . . . . . . . . 26 3.6.2 Laden von Quelltexten . . . . . . . . . . . . . . . . . 27

3.7 Speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7.1 Speichern als Strux-Diagramm . . . . . . . . . . . . 27 3.7.2 Speichern als Text . . . . . . . . . . . . . . . . . . . 27 3.7.3 Speichern als Grafik . . . . . . . . . . . . . . . . . . 28 3.7.4 Mit letztem Dateinamen speichern . . . . . . . . . . 28 3.7.5 Piktogramme . . . . . . . . . . . . . . . . . . . . . . 28

3.8 Drucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.8.1 Alles drucken . . . . . . . . . . . . . . . . . . . . . . 29 3.8.2 Nur angezeigtes drucken . . . . . . . . . . . . . . . . 29 3.8.3 Inhalt des Zwischenspeichers drucken . . . . . . . . 29 3.8.4 Erhöhung der Druckqualität . . . . . . . . . . . . . . 30

3.9 Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.9.1 Diagramm-Voreinsteller . . . . . . . . . . . . . . . . 30 3.9.2 Bildschirm-Voreinsteller . . . . . . . . . . . . . . . . 31 3.9.3 Programm-Voreinsteller . . . . . . . . . . . . . . . . 33 3.9.4 Workbench schließen ? . . . . . . . . . . . . . . . . . 34 3.9.5 Einstellungen öffnen . . . . . . . . . . . . . . . . . . 34 3.9.6 Einstellungen speichern . . . . . . . . . . . . . . . . 35

3.10 Übersetzungstabellen . . . . . . . . . . . . . . . . . . . . . . 36 3.10.1 Übersetzungstabelle erstellen . . . . . . . . . . . . . 36 3.10.2 Beispiel: Übersetzung einer While-Schleife . . . . . . 37 4 Beispielprogramm: ”Meßwerte“ 39

4.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 Erstellen des Struktogramms . . . . . . . . . . . . . . . . . 39 4.3 Erstellen eines C-Programms . . . . . . . . . . . . . . . . . 44 4.4 Erstellen eines Pascal-Programms . . . . . . . . . . . . . . . 47

5 Sonstiges 51

5.1 Titelleisten . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.1.1 des Fensters . . . . . . . . . . . . . . . . . . . . . . . 51 5.1.2 des Bildschirms . . . . . . . . . . . . . . . . . . . . . 51

5.2 Merkmale des Piktogramms . . . . . . . . . . . . . . . . . . 52 5.3 Aufruf aus der Shell . . . . . . . . . . . . . . . . . . . . . . 52 5.4 Unterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.5 Lizenzvertrag . . . . . . . . . . . . . . . . . . . . . . . . . . 54

A Amiga-Begriffe 57

B Sinnbilder 59 4 INHALTSVERZEICHNIS

Kapitel 1

Einleitung

Um von einer Idee zum fertigen Programm zu gelangen, sind mehrere Schritte nötig:

1. Spezifikation der Idee (genaue Beschreibung der Wünsche und Anforderungen)

2. Entwurf des Programms (Entwicklung eines Lösungsweges und der Programmstruktur)

3. Implementierung (d.h. Umsetzung in eine Programmiersprache und letztendlich in ein lauffähiges Programm)

Der Struktogramm-Editor Strux erleichtert dem Programmierer die Arbeit beim Entwurf der Programmstruktur und hilft beim Schritt zur Implementierung in einer beliebigen Programmiersprache. Dazu läßt sich zunächst die Programmstruktur als Struktogramm oder Programmablaufplan (PAP) bequem und übersichtlich am Bildschirm erstellen und bearbeiten. Anschließend kann der Entwurf als ”Quellcode-Gerüst“ für die eigentliche Implementierung gespeichert werden.

Viele Programmierer überspringen die Phase des Entwurfs und versuchen sofort, das Programm zu implementieren. Dies wird aber bei etwas größeren Projekten sehr unübersichtlich und endet meist im Chaos. Wird jedoch erst die Programmstruktur mit ”Strux“ erstellt, so verliert man nicht die Übersicht, die Programme werden fehlerfreier und bekommen so ganz nebenbei noch eine Kommentierung, was auch oft vernachlässigt wird.

Ebenfalls eignen sich Stuktogramme bzw. PAPs hervorragend zur Dokumentation und Erklärung von Programmen und Algorithmen, da sie programmiersprachenunabhängig und übersichtlich sind. (Auch bei Problemen, die nichts mit Computern zu tun haben, lassen sich leicht Lösungswege entwickeln und anschaulich darstellen)

Um ein bestehendes (womöglich unkommentiertes) Programm verstehen zu können, ist es sehr hilfreich, die Programmstruktur zu erkennen. Daher bietet Strux für die Sprachen PASCAL und C die Möglichkeit, Quellcode einzulesen und als Struktogramm bzw. PAP darzustellen und weiterzubearbeiten.

1.1 Über dieses Handbuch

Es werden Grundkenntnisse in der Bedienung des Amigas vorausgesetzt. Das bezieht sich insbesondere auf Dinge, welche im Handbuch zur Workbench ausführlich beschrieben sind (z.B. Dateiauswahlfenster). Da in diesem Handbuch nicht näher darauf eingegangen wird, sollte man im Zweifelsfall also dort nachschlagen.

Dieses Handbuch ist so aufgebaut, daß nach der Beschreibung der Installation in Kapitel 2 zunächst einige Grundlagen erklärt werden (Abschnitt 3.1), die zum Nachvollziehen der Beispiele in den folgenden Abschnitten nötig sind. Im Rest von Kapitel 3 werden dann alle Programmfunktionen nach Themen geordnet erläutert. Zum besseren Verständnis werden kurze Beispiele angeführt. In Kapitel 4 wird dann an einem größeren Programm der Weg von der Idee über das Struktogramm bis zum fertigen Programm gezeigt.

Um Verwirrungen zu vermeiden, werden in diesem Handbuch die von Commodore eingeführten und benutzten Begriffe verwendet. Damit sich aber Benutzer einer englischen Dokumentation zum Amiga auch zurechtfinden, befindet sich im Anhang eine Tabelle mit den englischen Übersetzungen der hier verwendeten Fachbegriffe.

1.2 Registrierung

Nach dem Erwerb von Strux sollten Sie umgehend die beiliegende Registrierungskarte zurücksenden. Sie sind dann registrierter Benutzer und haben folgende Vorteile:

• Sie werden bei Updates automatisch benachrichtigt und haben die Möglichkeit, zu einem günstigen Preis auf neue Programmversionen umzusteigen.

• Bei Problemen und Fragen zu Strux wird Ihnen kostenlos geholfen. (siehe 5.4)

• Defekte Originaldisketten werden Ihnen kostenlos ersetzt.

Falls Sie das Programm weitergeben (z.B. verkaufen oder verschenken), vergessen Sie nicht, Name und Adresse des neuen Benutzers registrieren zu lassen.

1.3 Danksagungen

Die folgenden Personen waren an der Entstehung von Strux beteiligt, sie haben Strux getestet, viele Fehler gefunden und hilfreiche Verbesserungsvorschläge gemacht. Ihnen sei hier gedankt:

Martin Berhorst, Oliver Eilhard, Rafael Erbacher und Martin Grote

Außerdem möchte ich Georg Heßmann für die Veröffentlichung von ”PasTEX“ und Stefan Becker für die Portierung von Metafont danken. Diese Programme haben mir bei der Erstellung dieses Handbuchs sehr geholfen.

Als Editor für die Erstellung des Programms und des Handbuchs wurde der ”CygnusEd-Professional V2.0“ von ASDG Inc. benutzt.

Strux ist komplett in C geschrieben und wurde mit dem Aztec C-Compiler V5.2 von Manx Inc. übersetzt.

1.4 Warenzeichen

Bitte beachten Sie, daß einige in diesem Handbuch genannte Produktnamen nicht frei von Rechten Dritter sind:

• Amiga, Kickstart und Workbench sind Warenzeichen der Commodore-Amiga, Inc.

• CygnusEd ist Warenzeichen von CygnusSoft Software

• Aztec-C ist Warenzeichen von Manx Software Systems Inc.

8 KAPITEL 1. EINLEITUNG

Vorbereitung zum Start

2.1 Hardwareanforderungen

Strux läuft auf jedem AMIGA mit mindestens 512 kByte RAM und Kickstart/Workbench-Version 2.0 oder höher.

2.2 Installation auf Festplatte oder Diskette

Ziehen Sie einfach die Schublade mit dem Namen ”Strux“ von der Strux-Diskette in die gewünschte Schublade auf ihrer Festplatte oder Diskette. Strux benötigt etwa 200 Kilobyte Platz auf der Disk.

2.3 Sicherungskopie

Sie haben das Recht, eine Sicherungskopie von Strux anzufertigen (siehe 5.5). Um die Installation und Bedienung von Strux einfach zu halten, wurde auf einen Kopierschutz verzichtet. Zudem gibt es wohl keinen Kopierschutz, der nicht in kurzer Zeit geknackt oder umgangen werden kann. Das bietet Ihnen neben der einfachen Installation den Vorteil, ohne großen Aufwand eine Sicherungskopie zu erstellen. Sie können dazu ein Kopierprogramm oder die Workbench benutzen. Lesen Sie im Zweifelsfall im Handbuch zur Workbench nach, wie eine Diskette kopiert wird. Anschließend sollten Sie die Originaldiskette an einem sicheren Ort aufbewahren. Wenn Strux auf einer Festplatte installiert ist, wird die Originaldiskette ebenfalls nicht mehr benötigt und kann an einem sicheren Ort verwahrt werden.

10 KAPITEL 2. VORBEREITUNG ZUM START

Bedienung des Programms

3.1 Grundlagen

Hier sollen zunächst einige grundlegende Dinge erklärt werden, die in den folgenden Kapiteln vorausgesetzt werden und die Sie benötigen, um die angegebenen Beispiele nachvollziehen zu können.

3.1.1 Start

Öffnen Sie zunächst die Schublade ”Strux“. Der Start des Programms erfolgt nun durch Anklicken des Piktogramms mit dem Namen ”Strux“ Anschließend erscheint ein Fenster, die Arbeitsfläche von Strux, auf der Workbench. Wenn Sie nun das Zoom-Symbol des Fensters betätigen (oben rechts), wird seine Größe an den sichtbaren Bereich des Bildschirms angepaßt.

3.1.2 Verlassen des Programms

Wählen Sie dazu den Menüpunkt Projekt ≫ Strux Verlassen… aus oder betätigen Sie das Schließsymbol des Fensters. Vor dem endgültigen Verlassen erfolgt noch eine Sicherheitsabfrage.

3.1.3 Hilfe

Strux besitzt eine eingebaute Hilfe-Funktion, die jederzeit aufgerufen werden kann. Es kann zu jedem Menüpunkt, jedem Fenster und zu einigen Begriffen jeweils ein erklärender Text angezeigt werden:

Hilfe zu Menüs und Menüpunkten: Menüpunkt wählen, jedoch die rechte Maustaste gedrückt halten, dabei die Help -Taste drücken.

Hilfe zu Fenstern: Wenn das Fenster angezeigt wird, einfach die Help - Taste drücken.

Begriffserklärungen: Im Hilfefenster das Symbol ”Begriffe“ anklicken und anschließend den gewünschten Begriff auswählen.

Es erscheint ein Fenster, in dem der Hilfstext angezeigt wird. Mit dem Rollbalken an der rechten Seite kann der Text verschoben werden. Während das Hilfefenster angezeigt ist, kann mit Strux weitergearbeitet werden. Das Hilfefenster kann jederzeit durch anklicken des Schließsymbols entfernt werden.

3.1.4 Menüs

Die Steuerung erfolgt vollständig über die Menüs. Die meisten Funktionen besitzen eine zugehörige Taste, um ein schnelles Arbeiten zu ermöglichen. Die zu den Funktionen gehörenden Tasten stehen in den Menüs und müssen zusammen mit der rechten ”AMIGA“-Taste ( A ) betätigt werden. In den Fenstern können die Symbole, bei denen ein Buchstabe unterstrichen ist, außer mit der Maus auch mit der entsprechenden Buchstabentaste betätigt werden. In Listen kann mit den Pfeiltasten geblättert werden.

3.1.5 Laden eines Projekts

Um die folgenden Punkte der Anleitung ausprobieren zu können, soll zunächst das Laden eines Projekts erklärt werden. Dazu wird der Menüpunkt Projekt ≫ Öffnen ≫ Strux-Diagramm… angewählt. Daraufhin erscheint das einheitliche Dateiauswahlfenster, dessen Bedienung den Amiga-Benutzern bekannt sein dürfte. Bei Problemen sollte man die Dokumentation zur Workbench zu Rate ziehen. Es sollte nun ein Diagramm ausgewählt und ”öffnen“ betätigt werden. Anschließend wird das Diagramm geladen und angezeigt.

Beispiel: Nun kann z.B. im Verzeichnis ”Beispiele“ das Diagramm ”Textanzeige“ ausgewählt und geladen werden, an dem die folgenden Erklärungen nachvollzogen werden können. Es handelt sich dabei um einen Entwurf für ein Programm, mit dem ein Text von Diskette geladen und angezeigt bzw. ausgedruckt werden kann. Das Diagramm ist in Abbildung 3.1 als Struktogramm dargestellt.

Abbildung 3.1: Beispiel ”Textanzeige“

3.1.6 Darstellungsarten

Ein Diagramm kann auf drei Arten dargestellt und bearbeitet werden: als Struktogramm, PAP oder Pseudocode. Es kann jederzeit zwischen den Darstellungsarten umgeschaltet werden. Dazu wählen Sie den Menüpunkt Einstellungen ≫ Diagramm … und wählen im dann erscheinenden Fenster die gewünschte Darstellung. Schließen Sie das Fenster mit ”Benutzen“.

Struktogramm: Das Projekt wird als Struktogramm dargestellt. (nach Nassi-Shneiderman, DIN 66261)

PAP: Das Projekt wird als Programmablaufplan (PAP) dargestellt. (nach DIN 66001 und DIN 66262)

Pseudocode: Das Projekt wird in schriftlicher Form als Pseudocode dargestellt. Die Befehle entsprechen dabei den Texten im Menü ”Hinzufügen“ (siehe 3.3.2).

Ist ein Diagramm zu groß für das Strux-Fenster, wird nur ein Teil dargestellt. Der Ausschnitt kann mit den Rollbalken am rechten und unteren Rand des Fensters verschoben werden.

3.1.7 Auswahl eines Blocks

Ein Block im Diagramm ist besonders markiert (mit einer anderen Farbe unterlegt). Dies ist der ”aktuelle Block“, er entspricht etwa dem Cursor in einer Textverarbeitung. Z.B. werden neue Blocks immer an diesen Block angehängt, das Ausschneiden bezieht sich auf diesen Block usw.

Um einen Block auszuwählen, d.h. ihn zum aktuellen Block zu machen, klickt man ihn einfach mit der Maus an. Bei Konstrukten wie einer Auswahl (z.B. IF … THEN) oder einer Schleife wird stets der gesamte Block mit den anhängenden Verzweigungen bzw. Schleifenrumpf markiert und als aktueller Block betrachtet.

Weiterhin gibt es die Möglichkeit, die Pfeiltasten zu benutzen. Dabei bedeuten die Tasten folgendes:

ohne ⇑ oder Ctrl -Taste:

↑ springe einen Block nach oben

↓ springe einen Block nach unten

→ gehe in Verzweigung oder Schleifenrumpf

← springe einen Block nach oben

mit ⇑ -Taste:

↑ springe zum nächsthöheren Konstrukt (z.B. aus Schleifenrumpf zurück in die Schleifenanweisung)

↓ gehe innerhalb der Verzweigung oder des Schleifenrumpfs zum untersten Block

→ gehe in letzten Zweig, z.B. bei ”Select Of“-Anweisungen

mit Ctrl -Taste:

↑ springe zum Anfang des Diagramms

↓ springe zum Ende des Diagramms

3.2 Der Zwischenspeicher (Clipboard)

Wie z.B. bei Textprogrammen üblich, lassen sich auch hier Teile des Diagramms ausschneiden oder kopieren und an anderer Stelle wieder einfügen. Das zuletzt ausgeschnittene Teil wird gespeichert, bis wieder etwas ausgeschnitten oder kopiert wird. Der Speicher, in dem das Teil aufbewahrt wird, heißt ”Zwischenspeicher“. Der Text der ausgeschnittenen Blöcke kann auch in andere Programme eingefügt werden, die den Zwischenspeicher (Clipboard) unterstützen. ^{1}

1Leider ist die Behandlung des Zwischenspeichers bei einigen Programmen schlecht programmiert, sodaß Clips aus Strux nicht erkannt werden. Beispielsweise läßt sich in

3.2.1 Ausschneiden

Menüpunkt: Bearbeiten ≫ Ausschneiden Der aktuelle Block oder der markierte Bereich (siehe 3.2.5) wird aus dem Diagramm gelöscht und im Zwischenspeicher abgelegt. Der vorherige Inhalt des Zwischenspeichers geht dabei verloren ! Es werden jeweils sämtliche Hauptverfeinerungen ausgeschnitten, d.h. alle andersfarbig angezeigten (siehe 3.5).

3.2.2 Kopieren

Menüpunkt: Bearbeiten ≫ Kopieren Der aktuelle Block wird im Zwischenspeicher abgelegt. Er bleibt aber im Diagramm erhalten. Der vorherige Inhalt des Zwischenspeichers geht dabei verloren ! Es werden jeweils sämtliche Hauptverfeinerungen mitkopiert, d.h. alle andersfarbig angezeigten (siehe 3.5).

3.2.3 Einfügen

Menüpunkt: Bearbeiten ≫ Einfügen Der Inhalt des Zwischenspeichers wird hinter dem aktuellen Block ins Diagramm eingefügt. Dabei bleibt der Inhalt des Zwischenspeichers erhalten und kann noch an weiteren Stellen eingefügt werden.

3.2.4 Beispiel

Im Diagramm ”Textanzeige“ soll vor Anzeige des Textes der Bildschirm gelöscht werden. Um diese Änderung am Diagramm vorzunehmen, führen wir folgende Schritte aus:

1. Zunächst wählen wir ”lösche Bildschirm“ als aktuellen Block, indem wir diesen Block mit der Maus anklicken

2. Wir wählen den Menüpunkt Bearbeiten ≫ Kopieren an. Nun ist der Block ”lösche Bildschirm“ im Zwischenspeicher abgelegt.

Strux ausgeschnittener Text in der Shell durch die Tastenkombination ”AMIGA-v“ ausgeben, jedoch erkennt z.B. das Programm ”Multiview“ (V39.16 auf Workbench 3.0)

den Text nicht (Aufruf: ”Multiview CLIPBOARD“). Dies liegt nicht an Strux, sondern daran, daß diese Programme den IFF-Typ ”CAT CLIP“ nicht verarbeiten können, dessen Verwendung allerdings ausdrücklich im AMIGA-Styleguide auf S.156 für den Zwischenspeicher vorgeschlagen wird.

Abbildung 3.2: Ergebnis der ersten Änderung am Beispiel ”Textanzeige“

3. Jetzt soll der Block ”lösche Bildschirm“ zwischen den Blöcken ”lade Textdatei“ und ”zeige Text an“ eingefügt werden. Dazu klicken wir zunächst den Block ”lade Textdatei“ an, um ihn zum aktuellen Block zu machen.

4. Danach wählen wir den Menüpunkt Bearbeiten ≫ Einfügen, um den Block ”lösche Bildschirm“ einzufügen.

Nun soll noch vor Ausgabe der Fehlermeldung der Bildschirm gelöscht werden.

1. Wir wählen zunächst den Block ”Fehlermeldung: “ kein Text geladen”“ aus.

2. Danach gehen wir mit der ↑ -Taste einen Block nach oben. Der Block wird nur als schmaler Balken dargestellt, da dies die ”Wurzel“ des ”Else“-Teils ist.

3. Der Block ”lösche Bildschirm“ befindet sich noch im Zwischenspeicher. Um ihn hier nochmal einzufügen, wählen wir den Menüpunkt Bearbeiten ≫ Einfügen an. Der Block wird nun vor dem Block ”Fehlermeldung: “ kein Text geladen” “ eingefügt.

Das geänderte Struktogramm ist in Abb. 3.2 gezeigt.

3.2.5 Markieren

Menüpunkt: Bearbeiten ≫ Bereich markieren Um mehrere Blocks auf einmal auszuschneiden oder zu kopieren, muß zunächst ein Bereich markiert werden. Dazu wird zuerst der oberste Block des Bereichs angeklickt und anschließend dieser Menüpunkt gewählt. Dann wählt man den letzten Block des Bereichs mit Maus oder Tastatur. Ein Bereich kann auch markiert werden, indem der oberste zu markierende Block mit der Maus angeklickt wird und anschließend mit gedrückter linker Maustaste über den Bereich gezogen wird. Die Markierung wird abgebrochen, indem ein Block angeklickt wird, der über dem markierten Block liegt oder der Menüpunkt Bearbeiten ≫ Bereich markieren nochmal angewählt wird. Während ein Bereich markiert wird, ist in der Titelleiste des Bildschirms ein ”M“ angezeigt.

3.2.6 Beispiel

Nun soll im Diagramm ”Textanzeige“ der zu druckende Text erst geladen und angezeigt werden. Um diese Änderung am Diagramm vorzunehmen, führen wir folgende Schritte aus:

1. Wir klicken den Block ”drucke Text“ an.

2. Anschließend wählen wir den Menüpunkt Bearbeiten ≫ Kopieren. Der Block ist jetzt im Zwischenspeicher.

3. Der kopierte Block soll nun an den Block ”Text drucken“ angehängt werden, um die Abfrage, ob der Text geladen wurde, löschen zu können. Dazu klicken wir zunächst den Block ”Text drucken“ an und wählen den Menüpunkt Bearbeiten ≫ Einfügen.

4. Wir klicken den Block ”Text geladen ?“ an und sehen, daß auch die beiden Verzweigungen in den aktuellen Block einbezogen werden.

5. Wir wählen den Menüpunkt Bearbeiten ≫ Ausschneiden. Der aktuelle Block wird gelöscht, er befindet sich allerdings noch im Zwischenspeicher. Da er nicht mehr benötigt wird ^{2}, können wir jetzt die Blöcke zum Laden und Anzeigen des Textes ausschneiden und vor ”drucke Text“ einfügen.

6. Also wählen wir den Block ”lies Name der Textdatei ein“. Dies ist der Anfang eines Bereichs, der kopiert werden soll.

2Man hätte auch den Menüpunkt Bearbeiten ≫ Löschen wählen können. Es ist aber sicherer, mit Bearbeiten ≫ Ausschneiden zu arbeiten, da sich das Ausgeschnittene noch im Zwischenspeicher befindet und notfalls wieder eingefügt werden kann.

Abbildung 3.3: Ergebnis der zweiten Änderung am Beispiel ”Textanzeige“

7. Wir wählen den Menüpunkt Bearbeiten ≫ Bereich Markieren. Dadurch wird der aktuelle Block zum Anfang des Bereichs. In der Titelleiste des Bildschirms erscheint ein ”M“, um anzuzeigen, daß der Markierungsmodus eingeschaltet ist.

8. Der Block ”zeige Text an“ soll das Ende des Bereichs sein, also klicken wir ihn an. Man sieht, daß der Bereich markiert (andersfarbig) ist.

9. Um den Bereich in den Zwischenspeicher zu kopieren, wählen wir den Menüpunkt Bearbeiten ≫ Kopieren. Die Markierung wird daraufhin gelöscht und wir können normal weiterarbeiten.

10. Wir klicken den Block ”Text drucken“ an. Dies ist ein Fall in der Auswahl (”Select of…“). Er kann genauso bearbeitet werden, wie andere Blöcke.

11. Mit dem Menüpunkt Bearbeiten ≫ Einfügen fügen wir den kopierten Bereich an der gewünschten Stelle ein.

Das Ergebnis sieht dann wie in Abb. 3.3 aus. Dieses Beispiel sollte das Arbeiten mit dem Zwischenspeicher erläutern.

Später (in 3.5) wird gezeigt, wie gleiche Bereiche unter einer Überschrift zusammengefaßt werden können (Verfeinerungen, Unterprogramme), was eleganter und übersichtlicher ist.

3.2.7 Laden und Speichern des Zwischenspeichers

Der Inhalt des Zwischenspeichers (der Clip) kann auch auf Disk gespeichert werden. Dazu dient das Untermenü Bearbeiten ≫ Speichere Clip als. Es sind drei verschiedene Arten des Speicherns möglich:

als Strux-Diagramm: Der Clip wird so gespeichert, daß er von Strux wieder geladen werden kann. (entweder mit Projekt ≫ Öffnen ≫ Strux-Diagramm… oder mit Bearbeiten ≫ Öffne Clip …)

als Text: Der Clip wird als ASCII-Text gespeichert. Dabei sind die Umsetzungen der verschiedenen Arten von Blöcken in einer Übersetzungstabelle (siehe 3.10.1) einstellbar. Dadurch besteht die Möglichkeit, einen Clip als Programmtext in einer beliebigen Sprache auszugeben. Es entsteht ein ”Gerüst“, welches die Programmstruktur enthält und aus dem dann einfach das fertige Programm erstellt werden kann.

als Grafik: Der Clip wird als Grafik im IFF-ILBM-Format gespeichert. Anschließend kann er z.B. mit einem Malprogramm nachbearbeitet werden oder mit einem DTP-Programm oder einer Textverarbeitung direkt als Illustration in einen Text eingebunden werden.

Eine Datei kann auch in den Zwischenspeicher geladen werden, um z.B. zwei Diagramme zusammenzufügen oder mehrmals benötigte Programmteile einmal zu erstellen und abzuspeichern, um sie dann in verschiedenen Projekten zu benutzen. Das Laden geschieht mit dem Menüpunkt Bearbeiten ≫ Öffne Clip . . .. Das Diagramm muß dabei im Strux-Format vorliegen (siehe 3.7.1).

3.2.8 Löschen von Blöcken oder Bereichen

Mit dem Menüpunkt Bearbeiten ≫ Löschen kann ein Block oder Bereich gelöscht werden. Es werden sämtliche Hauptverfeinerungen gelöscht, d.h. alle andersfarbig angezeigten (siehe 3.5). Das Gelöschte ist dann unwiederbringlich verloren. Man sollte also besser die Funktion Bearbeiten ≫ Ausschneiden benutzen, da das Ausgeschnittene sich anschließend noch im Zwischenspeicher befindet. Das Löschen von Blöcken kann sinnvoll sein, wenn der Inhalt des Zwischenspeichers erhalten bleiben soll.

3.2.9 Nummer des Zwischenspeichers

Es gibt 256 verschiedene Zwischenspeicher mit den Nummern 0 bis 255. Normalerweise benutzen alle Programme den Zwischenspeicher mit der Nummer Null, um Daten untereinander austauschen zu können. Wenn der Datenaustausch zwischen gleichzeitig laufenden Programmen aber nicht erwünscht ist, kann eine andere Zwischenspeicher-Nummer eingestellt werden. (Menüpunkt Einstellungen ≫ Programm…, siehe 3.9.3)

3.3 Erstellen eines Diagramms

3.3.1 Neues Projekt

Um ein Diagramm zu löschen, wird der Menüpunkt Projekt ≫ Neu … gewählt. Um nicht versehentlich durch Wahl dieses Punktes das gesamte Diagramm zu löschen, muß der Benutzer in einer Abfrage noch bestätigen, ob es wirklich gelöscht werden soll. Bei Wahl von ”nein“ passiert nichts, bei ”ja“ wird das Diagramm unwiderruflich gelöscht und eine leere Arbeitsfläche erscheint. Nun kann ein neues Diagramm erstellt werden. In der oberen linken Ecke erscheint der aktuelle Block als dünner Balken (in Pseudocode-Darstellung als Sternchen). Dies ist quasi die ”Wurzel“, an der das Diagramm angehängt wird.

3.3.2 Hinzufügen neuer Blöcke

Um in ein Diagramm einen neuen Block einzufügen, wählt man die entsprechende Art des Blocks aus dem Menü Hinzufügen. Meist erscheint dann ein Eingabefenster, in dem der Text des Blocks eingegeben werden kann. Wird kein Text eingegeben, so wird ”???“ als Text angezeigt. Wird bei der Texteingabe ”Abbrechen“ angewählt, so wird der Block nicht angehängt. Wird jedoch ”Benutzen“ gewählt oder die Texteingabe mit der Eingabetaste abgeschlossen, so wird der neue Block hinter dem aktuellen Block angehängt. Einige Blöcke verschiedenen Typs werden im Struktogramm und PAP durch das gleiche Symbol dargestellt. Nur im Pseudocode wird vor jede Zeile das richtige Schlüsselwort geschrieben. Man sollte trotzdem den Typ passend wählen, da er z.B. in einer anderen Darstellungsart durch ein eigenes Symbol dargestellt wird. Beim Speichern als Text (siehe 3.7.2) ist dies auch wichtig, da die verschiedenen Typen unterschiedlich übersetzt werden. Folgende Typen von Blöcken stehen zur Verfügung:

Aktion: Eine einfache Aktion. (DIN: ”Verarbeitung“). Sie wird durch ein Rechteck dargestellt.

If Then: Eine einfache Entscheidung. (DIN: ”Bedingte Verarbeitung“) Als Text wird die Bedingung und die Aktion im ”Then“-Zweig eingegeben. Der ”Else“-Teil kann nachträglich mit Hinzufügen ≫ Default/Else hinzugefügt werden.

If Then Else: Eine Entscheidung, bei der einer von zwei Programmzweigen ausgeführt wird. (DIN: ”Einfache Alternative“). An beide Zweige wird eine Aktion angehängt. Der ”Else“-Teil kann nachträglich gelöscht werden.

Select Of …: Eine Entscheidung, bei der zwischen mehreren Programmzweigen ausgewählt wird. (DIN: ”Mehrfache Alternative“). Zuerst wird der Text für die Entscheidung eingegeben, anschließend der Text für die erste Bedingung (Bedingung, daß der erste Zweig ausgeführt wird). An den ersten Zweig wird eine Aktion angehängt. Beliebig viele weitere Zweige können mit Hinzufügen ≫ Case angefügt werden. Mit Hinzufügen ≫ Default/Else wird ein Zweig angefügt, der ausgeführt wird, wenn keine Bedingung erfüllt ist.

Case: Einen weiteren Zweig bei einem ”Select Of“-Block hinzufügen. Als Text muß die Bedingung für diesen Zweig angegeben werden. Es wird eine Aktion angehängt.

Default/Else: Entweder an einen ”Select Of“-Block ein ”Default“-Zweig anfügen, d.h. ein Zweig, der ausgeführt wird, wenn keine Bedingung erfüllt ist. Oder an einen ”If“-Block ein ”Else“-Zweig anfügen. Es wird eine Aktion angehängt.

While: Eine Schleife. (DIN: ”Wiederholung mit vorausgehender Bedingungsprüfung“) Als Text wird die Schleifenbedingung eingegeben, in den Schleifenrumpf wird eine Aktion eingefügt.

Repeat Until: Eine Schleife. (DIN: ”Wiederholung mit nachfolgender Bedingungsprüfung“) Als Text wird die Schleifenbedingung eingegeben, in den Schleifenrumpf wird eine Aktion eingefügt.

For … Repeat: Eine Zählschleife. (DIN: ”Wiederholung mit vorausgehender Bedingungsprüfung“) Als Text wird die Schleifenbedingung eingegeben, in den Schleifenrumpf wird eine Aktion eingefügt.

Repeat Forever: Eine Endlosschleife. (DIN: ”Wiederholung ohne Bedingungsprüfung“) In den Schleifenrumpf wird eine Aktion eingefügt.

Exit: Schleife verlassen. (DIN: ”Abbruchanweisung“)

Subroutine: Aufruf eines Unterprogramms. (DIN: ”Hinweis auf Dokumentation an anderer Stelle“)

Program: Titel des Programms bzw. Verbindung zu anderen Programmen (im PAP). (DIN: ”Verbindungsstelle“)

Hinweis: Im Struktogramm wird diese Blockart wie eine Aktion ohne Umrandung dargestellt, da es dort kein eigenes Symbol dafür gibt.

Input: Eingabe. (DIN: ”Manuelle Verarbeitung“)

Output: Ausgabe. (DIN: ”Manuelle Verarbeitung“)

Parallel: Gleichzeitige Verarbeitung mehrerer Programmzweige (Prozesse) (DIN: ”Parallelverarbeitung“). Der erste Prozess wird durch eine Aktion dargestellt, weitere Prozesse können mit Hinzufügen ≫ Process angefügt werden.

Process: Einen weiteren Programmzweig an eine Parallelverarbeitung hinzufügen.

Im Anhang B sind die grafischen Darstellungen für die verschiedenen Typen im Struktogramm, PAP und Pseudocode gegenübergestellt.

3.4 Änderungen

Man kann Text und Typ des aktuellen Blocks ändern.

3.4.1 Textänderung

Menüpunkt: Bearbeiten ≫ Ändern ≫ Text… Es erscheint ein Fenster, in dem der Text geändert werden kann. Bei Betätigung von ”Abbruch“ bleibt der alte Text erhalten, sonst wird der geänderte Text übernommen. Übrigens: ”rechte AMIGA-Taste“ ( A ) und X löscht das Eingabefeld.

3.4.2 Typänderung

Menüpunkt: Bearbeiten ≫ Ändern ≫ Typ… In einem Fenster erscheinen sämtliche Typen, in die der Block umgewandelt werden kann. Durch anklicken von einem dieser Typen wird der neue Typ des Blocks gewählt und durch ”OK“ übernommen; bei ”Abbrechen“ bleibt der alte Typ erhalten. Auf die logische Korrektheit wird dabei keine Rücksicht genommen. Z.B. sollte der Text bei Umwandlungen zwischen ”While“- und ”Repeat“- Schleifen angepaßt werden.

3.5 Verfeinerungen

Um einen Entwurf übersichtlich und gut strukturiert zu gestalten, verwendet man Verfeinerungen. Damit kann ein beliebiger Block mit einem eigenen Diagramm genauer definiert werden. Taucht z.B. im Struktogramm ein Block ”lies Datei von Diskette“ auf, so sagt dieser Text kurzgefaßt alles, was man an diesem Punkt zum Verstehen des Struktogramms braucht. Das Lesen der Datei umfaßt selbst jedoch mehrere Schritte (öffnen der Datei, lesen, schliessen, Fehlerbehandlung usw.), die in einer Verfeinerug definiert werden können und vom Struktogramm aus unsichtbar sind. Auch Unterprogramme, also Programmteile, die von mehreren Stellen aus aufgerufen werden, lassen sich durch Verfeinerungen realisieren.

3.5.1 Block verfeinern

Um den aktuellen Block zu verfeinern, wird der Menüpunkt Verfeinerungen ≫ Block verfeinern gewählt. Es erscheint eine neue Arbeitsfläche, welche als Überschrift den Namen des Blocks enthält, der verfeinert wurde. Hier kann wie gewohnt ein Diagramm erstellt und bearbeitet werden. Dabei sind auch weitere Verfeinerungen möglich. Wenn ein Block schon verfeinert wurde, so gelangt man auch durch einen Doppelklick auf diesen Block in die Verfeinerung. Ein verfeinerter Block wird durch Fettdruck angezeigt, wenn der Menüpunkt Verfeinerungen ≫ Zeigen ? eingeschaltet ist. Mit dem Menüpunkt Verfeinerungen ≫ Zurück zu höherer Ebene kommt man zum Block zurück, der verfeinert wurde. Man gelangt durch einen Doppelklick auf den oberen Rand des Diagramms (nicht des Fensters) ebenfalls in die nächsthöhere Ebene. Mit Verfeinerungen ≫ zu höchster Ebene gelangt man in die höchste Ebene des Diagramms.

3.5.2 Beispiel

Die Verfeinerungen sollen am Beispiel des Textanzeigers erläutert werden. Zunächst sollte das Diagramm ”Textanzeige“ geladen werden. Es soll nun der Block ”lade Textdatei“ mit dem Diagramm aus Abb. 3.4 weiter verfeinert werden. Dazu sind folgende Schritte notwendig:

1. Zunächst klicken wir den Block ”lade Textdatei“ an, um ihn zum aktuellen Block zu machen.

2. Wir wählen den Menüpunkt Verfeinerungen ≫ Block verfeinern. Es erscheint eine leere Arbeitsfläche mit der Überschrift ”lade Textdatei“.

Abbildung 3.4: Verfeinerung des Blocks ”lade Textdatei“ im Beispiel

”Textanzeige“

Hier wollen wir nun die Aktion ”lade Textdatei“ näher beschreiben. Dies soll durch die folgenden drei Schritte geschehen.

3. Menüpunkt Hinzufügen ≫ Aktion. Als Text geben wir ”öffne Datei“ ein. Der Block ”öffne Datei“ erscheint.

4. Menüpunkt Hinzufügen ≫ Aktion. Als Text geben wir ”lies Datei“ ein. Der Block ”lies Datei“ wird angefügt.

5. Menüpunkt Hinzufügen ≫ Aktion. Als Text geben wir ”schließe Datei“ ein. Der Block ”schließe Datei“ erscheint.

6. Um nun aus dieser Verfeinerung ins ursprüngliche Diagramm zurückzukehren, wählen wir den Menüpunkt verfeinerungen ≫ Zurück zu höherer Ebene.

3.5.3 Verfeinerungen markieren

Mit dem Menüpunkt Verfeinerungen ≫ Zeigen ? kann ein- oder ausgeschaltet werden, ob die Verfeinerungen im Diagramm markiert werden sollen. Wenn die Markierung eingeschaltet ist, werden sämtliche Verfeinerungen in Fettschrift dargestellt. Die Markierung hat den Vorteil, daß man sofort erkennt, welche Blöcke schon verfeinert wurden. Eine Verfeinerung kann von mehreren Blöcken gleichen Namens aufgerufen werden, das Diagramm der Verfeinerung existiert aber nur einmal und ist an einem Block angehängt. Dieser Block (die ”Hauptverfeinerung“) wird andersfarbig beschriftet. Alle Operationen, die mit diesem Block ausgeführt werden (Ausschneiden, Kopieren, Drucken usw.) haben dann Wirkung auf die Verfeinerung. Wenn mit den nur durch Fettschrift markierten Blöcke Operationen ausgeführt werden, so haben diese keine Auswirkungen auf die Verfeinerung ! Wenn zwei Blöcke durch Änderung eines Textes die gleichen Texte, aber unterschiedliche Verfeinerungen haben, so wird an den geänderten Text die Endung ” 2“ angehängt, damit es nicht zu Verwirrung kommt.

3.5.4 Hauptverfeinerung setzen

Mit dem Menüpunkt Bearbeiten ≫ Verfeinerung setzen wird die Hauptverfeinerung auf den aktuellen Block gelegt. Dies kann erforderlich sein vor einer Operation, welche auch die Verfeinerungen betrifft. Soll z.B. die Verfeinerung nicht mitkopiert werden, weil sie sonst verdoppelt würde, so wird die Hauptverfeinerung außerhalb des zu kopierenden Bereichs gelegt.

3.5.5 Beispiel

(Fortsetzung des letzten Beispiels)

Zunächst sollte die Markierung der Verfeinerungen eingeschaltet werden: Wenn der Menüpunkt Verfeinerungen ≫ zeigen ? abgehakt ist, so ist die Markierung bereits eingeschaltet. Sonst wählen wir diesen Menüpunkt. Die Aktion ”lade Textdatei“ soll hinter ”Text drucken“ eingefügt werden.

Wir klicken den Block ”Text drucken“ an und wählen den Menüpunkt Hinzufügen ≫ Aktion. . .. Als Text geben wir ”lade Textdatei“ ein. Die Aktion wird eingefügt. Der Text ist in Fettschrift, um anzuzeigen, daß es für diesen Block eine Verfeinerung gibt.

Nun soll gezeigt werden, daß es sich um dieselbe Verfeinerung handelt wie beim anderen Block mit dem Text ”lade Textdatei“:

1. Wir wählen den Menüpunkt Verfeinerungen ≫ Block verfeinern und sehen anschließend die gleiche Verfeinerung wie eben (im letzten Beispiel) erstellt.

2. Nun werden wir diese Verfeinerung verändern. Dazu klicken wir den Block ”schließe Datei“ an und wählen den Menüpunkt Hinzufügen ≫ Output. . .. Als Text geben wir z.B. ein: ”schreibe ’Ok’ auf Bildschirm“.

3. Mit dem Menüpunkt Verfeinerungen ≫ zu höherer Ebene gehen wir zurück zum Hauptprogramm. Wir sehen, daß der aktuelle Block zur Hauptverfeinerung wurde, da er andersfarbig markiert ist.

4. Wir klicken den anderen Block ”lade Textdatei“ an. Da dieser nur mit Fettschrift markiert ist, handelt es sich um eine Nebenverfeinerung.

5. Nun gehen wir mit dem Menüpunkt Verfeinerungen ≫ Block verfeinern in die Verfeinerung zu dem Block. Wir sehen die soeben ausgeführte Änderung, d.h. es handelt sich um dieselbe Verfeinerung.

3.5.6 Verfeinerungen in ”Subroutine“s umwandeln

Da verfeinerte Blöcke oft als ”Subroutine“ dargestellt werden sollen, läßt sich diese Umwandlung auch automatisch vornehmen. Die Darstellung eines verfeinerten Blocks als ”Subroutine“ hat z.B. bei der Speicherung als Text den Vorteil, daß diese Blöcke anders übersetzt werden (als Unterprogramm- bzw. Prozeduraufrufe). Um automatisch jeden Block vom Typ ”Aktion“, ”Input“ oder ”Output“, der verfeinert wird, in einen Block vom Typ ”Subroutine“ umzuwandeln, wird der Menüpunkt Verfeinerungen ≫ Verfeinerungen zu ’Subroutine’ ≫ Automatisch ? eingeschaltet (abgehakt). Alle bisher verfeinerten Blöcke behalten zunächst ihren Typ und werden erst umgewandelt, wenn in die Verfeinerung gesprungen wird. Um sämtliche vorhandenen Verfeinerungen in einem Diagramm in ”Subroutine“s umzuwandeln, kann der Menüpunkt Verfeinerungen ≫ Verfeinerungen zu ’Subroutine’ ≫ Alle ändern benutzt werden. Auch hier ist die Umwandlung des Typs nur bei Blöcken von Typ ”Aktion“, ”Input“ und ”Output“ möglich. Alle anderen Blöcke behalten ihren Typ.

3.6 Laden

3.6.1 Laden von Strux-Dateien

Das Laden von Diagrammen mit dem Menüpunkt Projekt ≫ Öffnen ≫ Strux-Diagramm… wurde bereits in 3.1.5 besprochen. Eine weitere einfache Möglichkeit, Diagramme zu laden gibt es, wenn sich das Strux-Fenster auf der Workbench befindet. Dann braucht das Piktogramm eines Diagramms lediglich auf das Strux-Fenster gezogen und dort losgelassen werden. Das Diagramm wird daraufhin geladen und angezeigt. Die dritte Möglichkeit ist es, das Piktogramm eines Diagramms doppelt anzuklicken. Dadurch wird Strux gestartet und sofort das gewünschte Diagramm geladen. Außerdem besteht die Möglichkeit, in den Merkmalen des Piktogramms (engl. Tooltypes) ein Diagramm anzugeben, welches bei jedem Start von Strux geladen wird (siehe 5.2).

3.6.2 Laden von Quelltexten

Es gibt noch die Möglichkeit, einen Quelltext in der Programmiersprache Pascal oder C als Textdatei zu laden und als Struktogramm bzw. PAP darzustellen. Dieses Diagramm kann dann wie gewohnt weiterbearbeitet werden. Dazu wird zuerst der Menüpunkt Projekt ≫ Öffnen ≫ Text… gewählt. Es erscheint ein Dateiauswahlfenster, in welchem die Textdatei gewählt wird. In einem Fenster wird nun gefragt, ob es sich um ein Pascal- oder C-Programm handelt. Anschließend kann in einem weiteren Fenster der gewünschte Programmteil gewählt werden. Hier kann der Ladevorgang auch abgebrochen werden. Der Programmtext muß syntaktisch korrekt sein, da er sonst nicht umgewandelt werden kann. Prozeduren und Funktionen werden in Verfeinerungen umgesetzt. Es gehen einige Informationen des ursprünglichen Programms verloren, wie z.B. Variablendeklarationen, allerdings liegt der Sinn dieser Funktion darin, die Programmstruktur zu veranschaulichen.

3.7 Speichern

Ein Diagramm kann auf drei verschiedene Arten auf Disk gespeichert werden: im Strux-Format, als Text oder als Grafik. Der Name wird jeweils in einem Dateiauswahlfenster gewählt. Die Verzeichnisse, welche normalerweise zum Speichern verwendet werden sollen, können im Programm-Voreinsteller festgelegt werden (siehe 3.9.3). Das kann z.B. für Grafiken ein Verzeichnis mit dem Pfad dh0:grafik/bilder/iff/ sein. Diese Pfade werden beim Programmstart automatisch eingestellt. Natürlich kann man im Dateiauswahlfenster auch beliebige andere Pfade wählen.

3.7.1 Speichern als Strux-Diagramm

Menüpunkt: Projekt ≫ Speichern als ≫ Strux-Diagramm… Das Diagramm wird so gespeichert, daß es von Strux wieder geladen werden kann. Dabei gehen keine Informationen verloren.

3.7.2 Speichern als Text

Menüpunkt: Projekt ≫ Speichern als ≫ Text… Das Diagramm wird als ASCII-Text gespeichert. Dabei sind die Umsetzungen der verschiedenen Arten von Blöcken in einer Übersetzungstabelle einstellbar (siehe 3.10.1). Dadurch besteht die Möglichkeit, ein Diagramm als Programmtext in einer beliebigen Sprache auszugeben. Es entsteht ein ”Gerüst“, welches die Programmstruktur enthält und aus dem dann einfach das fertige Programm erstellt werden kann. Das Erstellen und Laden von Übersetzungstabellen wird in 3.10.1 behandelt. Falls noch keine Übersetzungstabelle eingestellt wurde, wird eine Fehlermeldung ausgegeben und man bekommt die Möglichkeit, eine Tabelle zu öffnen. Ein Beispiel, wie aus einem Diagramm ein Programm erstellt werden kann, befindet sich in Kapitel 4.

3.7.3 Speichern als Grafik

Menüpunkt: Projekt ≫ Speichern als ≫ Grafik… Das angezeigte Diagramm wird als Grafik im IFF-ILBM-Format gespeichert. Anschließend kann es z.B. mit einem Malprogramm nachbearbeitet werden oder mit einem DTP-Programm oder einer Textverarbeitung direkt als Illustration in einen Text eingebunden werden. Achtung! Es wird nur das angezeigte Diagramm gespeichert. Evtl. vorhandene Verfeinerungen werden nicht berücksichtigt ! Diese müssen dann einzeln gespeichert werden.

3.7.4 Mit letztem Dateinamen speichern

Menüpunkt: Projekt ≫ Speichern Soll ein Diagramm unter dem gleichen Namen gespeichert werden, unter dem es geladen wurde oder unter dem es zuletzt im Strux-Format gespeichert wurde, so kann dies mit dem Menüpunkt Projekt ≫ Speichern geschehen. Es erscheint dann normalerweise kein Dateiauswahlfenster. Nur wenn das Diagramm noch keinen Namen besitzt (etwa weil es neu erstellt und noch nicht gespeichert wurde), erscheint ein Dateiauswahlfenster. Das Diagramm wird immer im Strux-Format gespeichert.

3.7.5 Piktogramme

Zu gespeicherten Diagrammen werden normalerweise Piktogramme erzeugt, um auf der Workbench einfach mit ihnen arbeiten zu können. Dabei werden je nach Art der Datei (Strux-Format, Grafik oder Text) unterschiedliche Piktogramme erzeugt (Abb. 3.5). ^{3} Abbildung 3.5: Piktogramme für Strux-Diagramme, Texte und Grafiken

3Da beim Speichern im Strux-Format für das Standardprogramm der tatsächliche Programmname von Strux eingetragen wird (mit komplettem Pfad), kann das Piktogramm in beliebige Schubladen verschoben werden, ohne die Möglichkeit zu verlieren, Strux durch Doppelklick auf dieses Piktogramm automatisch zu starten. Wird jedoch

Es ist auch möglich, die Erzeugung von Piktogrammen abzustellen. Dazu dient der Menüpunkt Einstellungen ≫ Piktogramme ?. Ist der Punkt abgehakt, so werden Piktogramme erzeugt, sonst nicht.

3.8 Drucken

Zum Drucken werden die in den Drucker-Voreinstellern auf der Workbench gemachten Einstellungen (z.B. Druckertyp oder Format) benutzt. Während des Druckens erscheint ein Fenster, in welchem das Drucken jederzeit abgebrochen werden kann. Es gibt drei Auswahlmöglichkeiten:

3.8.1 Alles drucken

Menüpunkt: Projekt ≫ Drucken ≫ Alles Das gesamte Projekt (mit sämtlichen Verfeinerungen) wird ausgedruckt. Über jedem einzelnen Diagramm wird als Überschrift der Text des verfeinerten Blocks gedruckt.

3.8.2 Nur angezeigtes drucken

Menüpunkt: Projekt ≫ Drucken ≫ Angezeigtes Das momentan angezeigte Diagramm (ohne Verfeinerungen) wird ausgedruckt.

3.8.3 Inhalt des Zwischenspeichers drucken

Menüpunkt: Projekt ≫ Drucken ≫ Clip Der Inhalt des Zwischenspeichers (mit sämtlichen Verfeinerungen) wird ausgedruckt.

Strux in eine andere Schublade verschoben, so stimmt das Standardprogramm der bisher gespeicherten Diagramme nicht mehr.

3.8.4 Erhöhung der Druckqualität

Vor dem Drucken sollte eine große Schriftart für die Darstellung gewählt werden (siehe 3.9.1). Durch die Verkleinerung bei der Druckausgabe wird die Druckqualität und Auflösung besser. Das Diagramm wird genau so gedruckt, wie es auf dem Bildschirm erscheint. Daher sollte die Markierung der Verfeinerungen (Fettschrift bzw. andersfarbige Darstellung, siehe 3.5.3) vor dem Drucken ausgeschaltet werden, wenn sie im Ausdruck unerwünscht ist.

3.9 Einstellungen

Um das Programm optimal auf die benutzte Hardware und die eigenen Bedürfnisse und Wünsche einzustellen, gibt es das Menü ”Einstellungen“. Die Einstellungen können abgespeichert werden. Das Programm benutzt dann bei jedem Start diese Einstellungen. Außerdem können verschiedene Einstellungen gespeichert und bei Bedarf geladen werden, z.B. wenn mehrere Leute mit Strux arbeiten.

3.9.1 Diagramm-Voreinsteller

Menüpunkt: Einstellungen ≫ Diagramm… Es erscheint ein Fenster, in dem alle Einstellungen, welche die Darstellung des Diagramms betreffen, gemacht werden können.

Darstellung: Hier kann gewählt werden, in welcher Form das Diagramm dargestellt werden soll.

als Struktogramm: Darstellung als Struktogramm nach Nassi-Shneiderman, die Sinnbilder der DIN 66261 werden benutzt.

als PAP: Darstellung als Programmablaufplan mit Sinnbildern aus DIN 66001 und Programmkonstrukten, die in DIN 66262 festgelegt sind.

Pseudocode: Darstellung in einer Pseudosprache, in welcher die Konstrukte durch Schlüsselwörter und die Struktur durch Einrückungen beschrieben werden.

Schriftart: Die gewählte Schriftart für jede der drei Darstellungarten wird gezeigt, durch Betätigung eines ”wählen…“-Symbols können die Schriftarten geändert werden. Dazu erscheint ein Zeichensatz-Auswahlfenster, welches bekannt sein dürfte. Bei Problemen läßt sich die Bedienung im Workbench-Handbuch nachlesen.

Speichern: die Einstellungen dieses Fensters werden gespeichert und benutzt. Das Fenster wird geschlossen.

Benutzen: die Einstellungen dieses Fensters werden benutzt, gehen jedoch beim Verlassen von Strux verloren. Das Fenster wird geschlossen.

Abbrechen: die alten Einstellungen bleiben erhalten, keine Änderung wird übernommen. Das Fenster wird geschlossen.

Das Schließsymbol des Fensters hat die gleiche Wirkung wie das ”Abbrechen“-Symbol.

3.9.2 Bildschirm-Voreinsteller

Menüpunkt: Einstellungen ≫ Bildschirm… Es erscheint ein Fenster, in dem der Bildschirm, auf welchem Strux laufen soll, eingestellt werden kann. Dabei kann entweder ein bereits geöffneter Public-Schirm ausgewählt oder ein eigener Bildschirm geöffnet werden. Ein ”Public-Schirm“ ist ein Bildschirm, der von einem Programm geöffnet wurde und auf dem auch andere Programme ihre Fenster öffnen können. Jeder Public-Schirm hat einen Namen. Dieser Name ist jedoch nicht der Name, welcher in der Titelleiste des betreffenden Bildschirms steht. Der Name eines Public-Schirms ist normalerweise in der Dokumentation zu einem Programm angegeben. Allerdings ist es nicht nötig, dort nachzuschlagen, da Strux in diesem Fenster eine Liste mit den Namen aller geöffneten Public-Schirme anzeigt.

Die Symbole im Fenster haben folgende Bedeutungen:

Darstellung auf: Es wird wird eine Liste aller momentan geöffneten Public-Schirme gezeigt. Hier kann ein beliebiger Bildschirm ausgewählt werden. Voreingestellt ist der Bildschirm, auf dem mit Strux gerade gearbeitet wird. Die Auswahl ist wirkungslos, wenn der Punkt ”eigener Bildschirm“ eigeschaltet ist.

eigener Bildschirm: Wird dieses Auswahlfeld eingeschaltet (Häkchen erscheint), so öffnet Strux einen eigenen Bildschirm, die Auswahl aus der Liste ist dann wirkungslos. Der eigene Bildschirm ist ein Public-Schirm, d.h. andere Programme können Fenster auf diesem Bildschirm öffnen. Den Name des Bildschirms erfährt man im Menüpunkt Projekt ≫ Info. . .. Das Aussehen kann durch die Symbole ”Modus“, ”Schrift“ und ”Farben“ festgelegt werden.

Modus…: Es erscheint der Bildschirmmodus-Voreinsteller (siehe 3.9.2). Dort kann der Modus des eigenen Bildschirms eingestellt werden.

Schriftart…: Es erscheint ein Zeichensatz-Auswahlfenster, in welchem die Schriftart für den eigenen Bildschirm gewählt werden kann. Dieser Zeichensatz wird für die Menüs und Fenster benutzt.

Farben…: Es erscheint ein Fenster, in dem die Farben für den eigenen Bildschirm eingestellt werden können (siehe 3.9.2). Die Farbeinstellung ist nur möglich, wenn sich Strux auf einem eigenen Bildschirm befindet.

Speichern: Die Einstellungen dieses Fensters werden gespeichert und benutzt, es wird also evtl. ein neuer Bildschirm geöffnet oder auf einen anderen Public-Schirm gesprungen. Das Fenster wird geschlossen.

Benutzen: Die Einstellungen dieses Fensters werden benutzt, es wird also evtl. ein neuer Bildschirm geöffnet oder auf einen anderen Public-Schirm gesprungen. Die Einstellungen gehen jedoch beim Verlassen von Strux verloren. Das Fenster wird geschlossen.

Abbrechen: Die alten Einstellungen bleiben erhalten, keine Änderung wird übernommen. Das Fenster wird geschlossen.

Das Schließsymbol des Fensters hat die gleiche Wirkung wie das ”Abbrechen“-Symbol.

Bildschirmmodus einstellen

Das  Fenster  ”Bildschirmmodus“  erscheint,  wenn  im

Bildschirm-Voreinsteller das Symbol ”Modus…“ betätigt wird. Hier kann der gewünschte Modus sowie die Größe des Bildschirms eingestellt werden. Nähere Informationen über die verschiedenen Bildschirmmodi finden Sie im Workbench-Handbuch.

Liste der Modi: Oben im Fenster befindet sich eine Liste aller verfügbaren und möglichen Bildschirmmodi. Die minimale horizontale Auflösung beträgt dabei 640 Bildpunkte. Der gewünschte Modus muß aus dieser Liste gewählt werden.

Breite und Höhe: Die Breite und Höhe des Bildschirms läßt sich frei wählen, jedoch kann die Mindestgröße des jeweiligen Anzeigemodus nicht unterschritten werden. Wenn das Auswahlfeld ”Vorgaben“ abgehakt ist, so wird automatisch die Standardgröße des gewählten Anzeigemodus eingestellt.

Vorgaben: Ist dieses Auswahlfeld abgehakt, wird in den Feldern ”Breite“ und ”Höhe“ automatisch die Standardgröße des gewählten Anzeigemodus eingestellt.

Auto-Rollen: In diesem Auswahlfeld kann eingestellt werden, ob sich der Bildschirmausschnitt automatisch verschiebt, wenn die Bildschirmfläche größer ist als auf dem Monitor darstellbar und mit dem Mauszeiger der Bildrand erreicht ist.

OK: Diese Einstellungen werden übernommen.

Abbrechen: Die alten Einstellungen bleiben erhalten. Das Betätigen das Schließsymbols hat die gleiche Wirkung.

Farben einstellen

Hier kann die Farbeinstellung für den eigenen Bildschirm vorgenommen werden. Das Fenster ”Bildschirmfarben“ erscheint, wenn im Bildschirm-Voreinsteller das Symbol ”Farben…“ betätigt wird.

Farbe: In der Palette wird zunächst die Farbe ausgewählt, welche verändert werden soll.

Rot, Grün und Blau: Mit diesen Schiebereglern kann der Rot-, Grünund Blauanteil der Farbe eingestellt werden.

Workbenchfarben: Durch Auswahl dieses Symbols wird die Farbeinstellung der Workbench übernommen.

OK: Die Farben werden übernommen.

Abbrechen Die alten Farben bleiben erhalten. Das Betätigen des Schließsymbols hat die gleiche Wirkung.

3.9.3 Programm-Voreinsteller

Menüpunkt: Einstellungen ≫ Programm… Es erscheint ein Fenster, in dem alle Einstellungen, welche die Bedienung des Programms betreffen, gemacht werden können. Das sind:

Pfade: Hier können die Pfade für Diagramm-, Text- und Grafikdateien eingestellt werden. Die aktuellen Pfade werden angezeigt, durch Betätigen eines ”wählen…“-Symbols kann mit Hilfe eines Verzeichnisauswahlfensters ein neuer Pfad eingestellt werden.

Verfeinerungen: Die Zustände der Menüpunkte Verfeinerungen ≫ zeigen ? und Verfeinerungen ≫ Verfeinerungen zu Subroutine ≫ Automatisch ? können hier eingestellt werden. (siehe 3.5.3 bzw. 3.5.6)

Sonstiges: Die Zustände der Menüpunkte Einstellungen ≫ Workbench ? und Einstellungen ≫ Piktogramme erzeugen ? können hier eingestellt werden. (siehe 3.9.4 bzw. 3.7.5)

Zwischenspeicher-Nummer: Die Nummer des Zwischenspeichers (für Kopier-, Ausschneide- und Einfügeoperationen) kann hier geändert werden. Normalerweise benutzen alle Programme den Zwischenspeicher mit der Nummer Null, um Daten untereinander austauschen zu können. Wenn der Datenaustausch aber nicht erwünscht ist, kann eine andere Zwischenspeicher-Nummer eingestellt werden. (siehe 3.2.9)

Speichern: Die Einstellungen dieses Fensters werden gespeichert und benutzt. Das Fenster wird geschlossen.

Benutzen: Die Einstellungen dieses Fensters werden benutzt, gehen jedoch beim Verlassen von Strux verloren. Das Fenster wird geschlossen.

Abbrechen: Die alten Einstellungen bleiben erhalten, keine Änderung wird übernommen. Das Fenster wird geschlossen. Das Schließsymbol des Fensters hat die gleiche Wirkung wie dieses Symbol.

3.9.4 Workbench schließen ?

Menüpunkt: Einstellungen ≫ Workbench ? Hier wird eingestellt, ob die Workbench geöffnet sein soll. Wird dieser Menüpunkt eingeschaltet (abgehakt), so wird versucht, die Workbench zu öffnen, andernfalls wird versucht, sie zu schliessen. Sollte dies nicht gelingen, weil etwa noch Programme auf der Workbench laufen, so erscheint eine Meldung. Die Workbench kann geschlossen werden, um mehr freien Speicher zur Verfügung zu haben.

3.9.5 Einstellungen öffnen

Menüpunkt: Einstellungen ≫ öffnen… Eine abgespeicherte Einstellung kann von Disk geladen und benutzt werden. Es erscheint ein Dateiauswahlfenster, in welchem eine Einstellung gewählt werden kann. Es werden nur Dateien mit der Endung ”.prefs“ angezeigt, um die Einstellungen besser finden zu können. Die gewählte Einstellung wird anschließend geladen und das Programm danach eingestellt. Beim Start von Strux werden die Einstellungen aus der Datei ”Strux.prefs“ gelesen (falls nicht in den Merkmalen etwas anderes Eingestellt wurde, siehe 5.2). Durch Öffnen dieser Einstellung erhält man also seine Starteinstellung zurück.

3.9.6 Einstellungen speichern

unter altem Namen

Menüpunkt: Einstellungen ≫ speichern Alle Einstellungen des Programms werden unter dem Namen gespeichert, mit welchem sie geladen wurden.

unter neuem Namen

Menüpunkt: Einstellungen ≫ speichern als… Alle Einstellungen des Programms werden gespeichert. Es erscheint ein Dateiauswahlfenster, in welchem der Name gewählt werden kann, unter dem die momentanen Einstellungen gespeichert werden sollen. Der Name sollte mit ”.prefs“ enden, um die Einstellungen später besser finden zu können und sie von anderen Dateien zu unterscheiden. Beim Start von Strux werden die Einstellungen aus der Datei ”Strux.prefs“ gelesen. Werden die Einstellungen also unter diesem Namen im selben Verzeichnis wie Strux gespeichert, startet das Programm von nun an mit diesen Einstellungen. So kann man sich seine individuelle Arbeitsumgebung einstellen. Folgende Einstellungen werden gespeichert:

• Name des Public-Schirms

• Darstellung auf eigenem Bildschirm ?

• Größe, Modus, Farben und Zeichensatz des eigenen Bildschirms

• Größe und Position des Strux-Fensters

• Art der Darstellung

• Zeichensätze für die drei verschiedenen Arten der Darstellung

• Einstellungen der Menüs

• Zwischenspeicher-Nummer

• Name der Übersetzungstabelle

3.10 Übersetzungstabellen

3.10.1 Übersetzungstabelle erstellen

Menüpunkt: Einstellungen ≫ Übersetzungstabelle… Eine Übersetzungstabelle wird zum Speichern als Text benötigt. Es erscheint ein Fenster, in dem solch eine Tabelle erstellt und geändert werden kann.

Tabelle: In der Tabelle kann das zu ändernde Konstrukt ausgewählt werden und dann eingestellt werden, wie ein solcher Block in Text umgesetzt wird. Das gleiche gilt für Hauptprogramm und Verfeinerungen.

Leerzeichen zu ’ ’: Hier wird eingestellt, ob die Leerzeichen in den Texten der Blöcke als Leerzeichen oder als Unterstrich (” “) ausgegeben werden. Es können wahlweise alle Texte umgewandelt werden, nur die Namen von Verfeinerungen oder keine Umwandlung stattfindet. Wenn ein Blocktext aus mehreren Worten besteht, ist die Ausgabe der Leerzeichen als Unterstrich besonders nützlich, da so der Text direkt als Prozedurname benutzt werden kann.

Neu: Sämtliche Textfelder werden gelöscht.

Speichern als…: Die Übersetzungstabelle wird gespeichert. Der Name wird in einem Dateiauswahlfenster ausgewählt.

Öffnen…: Eine Übersetzungstabelle wird geladen. Der Name wird in einem Dateiauswahlfenster ausgewählt.

Speichern: Die Tabelle wird gespeichert, außerdem wird der Name in den Einstellungen gespeichert.

Benutzen: Die Tabelle wird benutzt, geht jedoch beim Verlassen von Strux verloren, falls sie nicht gespeichert wurde.

Abbrechen: Die alte Tabelle wird beibehalten und das Fenster geschlossen.

Um die Umsetzungen der Programmkonstrukte in den Textfeldern eintragen zu können, gibt es einige Steuerzeichen:

%n : neue Zeile beginnen
%t : Text des Blocks
%bn : dazugehöriger Programmzweig (z.B. Schleifenrumpf oder

Then-Zweig), wobei n eine Ziffer ist und die Anzahl der Zeichen angibt, um die der Block eingerückt werden soll.

%v : (nur im den Feldern ”Hauptprogramm“ und ”Verfeinerung“ !)

An dieser Stelle werden die zugehörigen Verfeinerungen eingebunden.

%% : Das Prozentzeichen selbst wird ausgegeben.

Es befinden sich auf der Strux-Diskette schon Übersetzungstabellen für einige Sprachen. Jedoch sollen dies nur Beispiele sein, da sich jeder Programmierer je nach Bedürfnissen und persönlichem Programmierstil einfach seine eigenen Tabellen erstellen kann.

3.10.2 Beispiel: Übersetzung einer While-Schleife

Am Beispiel der While-Schleife und Ihrer Umsetzung in die Sprachen ”C“ und ”Pascal“ soll die Bedeutung der Steuerzeichen erläutert werden. Es soll eine While-Schleife mit der Bedingung ”a<b“ und dem Schleifenrumpf ”erhöhe a um 3“ übersetzt werden (siehe Abb. 3.6). Auf der Strux-Diskette befindet sich dieses Beispiel unter

”Diagramme/Beispiele/Übersetzungsbeispiel“.

in C: Im Textfeld der Übersetzungstabelle stehe: ”while(%t)%n {%b2 }“.

1. Text bis zum %-Zeichen wird geschrieben, also ”while(“

2. für %t wird Text des Blocks geschrieben, also ”a<b“

3. ”)“ wird geschrieben

4. %n veranlaßt, daß neue Zeile begonnen wird

5. ” {“ wird geschrieben

6. %b2 heißt: Hier wird der Schleifenrumpf eingefügt, wobei alle Zeilen um zwei Zeichen eingerückt werden. Er beginnt in einer neuen Zeile. Hier besteht der Schleifenrumpf nur aus einer Aktion, die mit ”/* erhöhe a um 3 */“ übersetzt wird. Nach dem Schleifenrumpf wird eine neue Zeile begonnen.

7. ” }“ wird geschrieben.

8. Text ist zuende, daher wird eine neue Zeile begonnen

also Ergebnis:

Abbildung 3.6: Struktogramm zum Übersetzungsbeispiel

while(a<b)
{
/* erhöhe a um 3 */
}

in Pascal: Im Textfeld der Übersetzungstabelle stehe: ”WHILE %t DO

BEGIN%b2END;“

1. ”WHILE“ wird geschrieben

2. für %t wird ”a<b“ geschrieben

3. ”DO BEGIN“ wird geschrieben

4. für %b2 wird der Schleifenrumpf eingesetzt, wobei alle Zeilen um zwei Zeichen eingerückt werden. Er beginnt in einer neuen Zeile. Hier besteht der Schleifenrumpf nur aus einer Aktion, die mit ”{ erhöhe a um 3 }“ Übersetzt wird. Nach dem Schleifenrumpf wird eine neue Zeile begonnen.

5. ”END;“ wird geschrieben.

6. Text ist zuende, daher wird eine neue Zeile begonnen

also Ergebnis:

WHILE a<b DO BEGIN
{ erhöhe a um 3 }
END;

Nun muß im Programmtext nur noch im Schleifenrumpf die Anweisung ”erhöhe a um 3“ in der jeweiligen Sprache geschrieben werden (”a+=3;“ bzw. ”a:=a+3;“) und fertig ist die Schleife. (mit Kommentar !)

Beispielprogramm: ”Meßwerte“

4.1 Aufgabenstellung

Das Programm soll eine beliebige Anzahl von Zahlen (z.B. Meßwerten) einlesen und den Mittelwert sowie das Maximum dieser Zahlen berechnen und ausgeben. Dazu wird erst schrittweise ein Struktogramm erstellt, welches anschließend in ein C- oder Pascal-Programm umgewandelt wird.

Dieses Beispiel befindet sich auch auf der Strux-Diskette im Verzeichnis ”Diagramme/Beispiele“. Es ist jedoch hilfreich, die einzelnen Schritte direkt mit Strux nachzuvollziehen.

4.2 Erstellen des Struktogramms

1. Zunächst soll die grobe Struktur des Programms festgelegt werden. Dazu unterteilen wir die Aufgabenstellung in vier Schritte, die wir jeweils als Block vom Typ ”Aktion“ eingeben. Die vier Schritte sind:

      (a) Meßwerte einlesen
     (b) Mittelwert berechnen
      (c) Maximum suchen
     (d) Mittelwert und Maximum ausgeben

Das Ergebnis sollte wie Abb. 4.1 aussehen.

Abbildung 4.1: Höchste Ebene des Struktogramms zum Programm ”Meßwerte“

2. Nun soll der Block ”Meßwerte einlesen“ näher beschrieben werden. Dazu wird dieser Block angeklickt und der Menüpunkt Verfeinerungen ≫ Block verfeinern gewählt. Es erscheint eine leere Arbeitsfläche mit

dem Titel ”Meßwerte einlesen“.

(a) Wir wollen zunächst die Anzahl der vorhandenen Meßwerte einlesen. Diese Zahl soll n heißen. Also wählen wir den Menüpunkt Hinzufügen ≫ Input…, um einen Block für eine Eingabe zu erzeugen. Als Text geben wir ein: ”Anzahl der Meßwerte (=n)

einlesen“.

(b) Jetzt sollen die eigentlichen Meßwerte eingelesen werden. Es werden n Werte erwartet, also brauchen wir eine Schleife, die n mal durchlaufen wird und bei jedem Durchlauf einen Wert einliest. Wir benutzen eine Zählschleife, die wir mit dem Menüpunkt Hinzufügen ≫ For… Repeat… erzeugen. Als Text geben wir für die Schleife ”für i von 1 bis n“ ein, für die Aktion im Schleifenrumpf ”i-ten Meßwert einlesen“. Da die Aktion eine Eingabe ist, müssen wir noch den Typ ändern. Dafür wird der Menüpunkt Bearbeiten ≫ Ändern ≫ Typ gewählt. Im daraufhin erscheinenden Fenster wählen wir ”Input“ und schließen das Fenster mit dem Symbol ”Benutzen“. Das Struktogramm sollte jetzt aussehen wie in Abb. 4.2.

(c) Uns fällt ein, daß wir noch überprüfen wollen, ob die eingegebene Anzahl der Meßwerte (n) im zulässigen Bereich liegt. Die Anzahl soll solange eingelesen werden, bis die Anzahl im zulässigen Bereich liegt. An der Wortwahl ”solange … bis“ sehen wir, daß hier eine ”Repeat … Until“-Schleife gebraucht wird. Also klicken wir auf den Block ”Anzahl der Meßwerte (=n) einlesen“ und wählen den Menüpunkt Hinzufügen ≫ Repeat Until. . .. Nun müssen wir im Texteingabefenster die Bedin-Abbildung 4.2: Verfeinerung zu ”Meßwerte einlesen“, erster Schritt

Abbildung 4.3: Verfeinerung zu ”Meßwerte einlesen“, zweiter Schritt

gung eingeben, wann die Schleife beendet werden soll, also ”bis n>0 und n<=maximale Anzahl“. Die Aktion im Schleifenrumpf benötigen wir nicht, da wir den Block ja schon erzeugt haben. Also wählen wir ohne Text einzugeben das ”Benutzen“-Symbol. Tja, jetzt (Abb. 4.3) müssen wir noch den Block ”Anzahl der Meßwerte (=n) einlesen“ in den Schleifenrumpf bekommen und den ”???“-Block entfernen. Das schaffen wir in fünf Schritten:

  i. Block ”Anzahl der Meßwerte (=n) einlesen“ anklicken

ii. Menüpunkt Bearbeiten ≫ Ausschneiden wählen iii. Block ”???“ anklicken iv. Menüpunkt Bearbeiten ≫ Einfügen wählen v. Menüpunkt Bearbeiten ≫ Löschen wählen

Zum Vergleich kann man sich Abb. 4.4 anschauen. Um zurück zum Hauptprogramm zu gelangen, wählen wir den Menüpunkt Verfeinerungen ≫ Zurück zu höherer Ebene.

3. Jetzt soll der Block ”Mittelwert berechnen“ verfeinert werden. Also diesen Block anklicken und Menüpunkt Verfeinerungen ≫ Block verfeinern wählen. Um den Mittelwert zu berechnen, wollen wir erst alle Abbildung 4.4: Verfeinerung zu ”Meßwerte einlesen“, fertig

Abbildung 4.5: Verfeinerung zu ”Mittelwert berechnen“

Meßwerte aufsummieren und anschließend die Summe durch die Anzahl teilen. Das sollte jetzt kein großes Problem mehr sein, also werden wir es in drei Schritte unterteilen:

(a) Aktionsblock mit dem Text ”Summe auf Null setzen“ erzeugen

(b) Zählschleife (”For… Repeat…“) mit dem Text ”für alle n Werte“ und der Aktion im Schleifenrumpf mit dem Text ”Wert

    zur Summe addieren“ erzeugen
 (c) Aktion ”Mittelwert := Summe / n“ erzeugen

Das Struktogramm ist auch in Abb. 4.5 gezeigt. Mit Verfeinerungen ≫ Zurück zu höherer Ebene gelangen wir zurück zum Hauptprogramm.

4. Nun wollen wir noch den Block ”Maximum suchen“verfeinern (anklicken und Menüpunkt Verfeinerungen ≫ Block verfeinern wählen). Das Maximum soll auf folgende Art gesucht werden: Das Maximum soll auf den ersten Wert gesetzt werden. Anschließend soll jeder andere Wert mit dem bisherigen Maximum verglichen werden. Ist ein Wert größer als das bisherige Maximum, wird das Maximum auf diesen Wert gesetzt. Diese Beschriebung wird sicher

Abbildung 4.6: Verfeinerung zu ”Maximum suchen“

verständlicher, wenn man das Struktogramm vor Augen hat (Abb. 4.6).

(a) Zunächst erzeugen wir die Aktion ”setze Maximum auf ersten

Wert“

(b) Anschließend fügen wir eine Zählschleife (”For… Repeat…“) mit dem Text ”für i von 2 bis n“ an. Für die Aktion im Schleifenrumpf brauchen wir keinen Text einzugeben (”Benutzen“ wählen)

(c) Nun wollen wir den Vergleich jedes Wertes mit dem Maximum in den Schleifenrumpf einfügen. Dazu klicken wir den ”???“-Block an und erzeugen eine Entscheidung mit dem Menüpunkt Hinzufügen ≫ If Then. . .. Als Bedingung geben wir ”i-ter Wert größer als Maximum ?“ ein und als Aktion im ”THEN“-Zweig

den Text ”setze Maximum auf i-ten Wert“.

(d) Nun müssen wir nur noch den überflüssigen ”???“-Block löschen. Dazu klicken wir ihn an und wählen den Menüpunkt Bearbeiten ≫ Löschen.

Damit ist die Erstellung des Struktogramms abgeschlossen. Es kann jetzt mit dem Menüpunkt Projekt ≫ Speichern als ≫ Strux-Diagramm… auf Disk abgespeichert werden. Für die Erstellung eines Programmablaufplans sind die gleichen Schritte notwendig. Evtl. müßten die Texte etwas anders gewählt werden. Um sich das Struktogramm als Programmablaufplan anzuschauen, muß nur die Art der Darstellung im Diagramm-Voreinsteller geändert werden. (Menüpunkt Einstellungen ≫ Diagramm…)

4.3 Erstellen eines C-Programms

Nachdem das Struktogramm erstellt ist, wollen ein Programm in der Sprache C daraus erstellen. Dazu müssen wir zunächst die passende Übersetzungstabelle einstellen. Also wählen wir den Menüpunkt Einstellungen ≫ Übersetzungstabelle… und klicken im daraufhin erscheinenden Fenster das Symbol ”Öffnen…“ an. Wir wählen die Übersetzungstabelle ”C“ und öffnen sie. Danach sollte sie angezeigt werden. Das Fenster schließen wir mit dem Symbol ”Benutzen“. Nun wird der Menüpunkt Projekt ≫ Speichern als ≫ Text… gewählt und wir speichern das Diagramm unter einem beliebigen Namen. Wenn wir uns diese Datei mit einem Texteditor anschauen, sehen wir folgendes:

Meßwerte_einlesen()
{
  do
   {
    /* Anzahl der Meßwerte (=n) einlesen */
   }
  while();  /* solange nicht bis n>0 und n<=maximale Anzahl */
  for(;;) /* für i von 1 bis n */
   {
    /* i-ten Meßwert einlesen */
   }
}
Mittelwert_berechnen()
{
  /* Summe auf Null setzen */
  for(;;) /* für alle n Werte */
   {
    /* Wert zur Summe addieren */
   }
  /* Mittelwert := Summe / n */
}
Maximum_suchen()
{
  /* setze Maximum auf ersten Wert */
  for(;;) /* für i von 2 bis n */
   {
    if()  /* i-ter Wert größer als Maximum ? */

     {
      /* setze Maximum auf i-ten Wert */
     }
   }
}
main()
{
  Meßwerte_einlesen();
  Mittelwert_berechnen();
  Maximum_suchen();
  /* Mittelwert und Maximum ausgeben */
}

Daraus können wir nun einfach folgendes C-Programm erstellen, indem wir einige Zeilen ergänzen:

#define N_MAX 50    /* maximal 50 Werte */
int mittel,max,     /* Mittelwert und Maximum */
    wert[N_MAX],
    n;              /* Anzahl */

Meßwerte_einlesen()
{
  int i;
  do
   {
    /* Anzahl der Meßwerte (=n) einlesen */
    printf("Anzahl der Meßwerte ? ->");
    scanf("%d",&n);
   }
  while(!(n>0 && n<N_MAX));  /* solange nicht n>0 und n<=maximale Anzahl */
  for(i=0;i<n;i++) /* für i von 1 bis n */
   {
    /* i-ten Meßwert einlesen */
    printf("%d. Meßwert ? ->",i+1);
    scanf("%d",&wert[i]);
   }
}

Mittelwert_berechnen()
{
/* Summe auf Null setzen */
int summe=0,i;
for(i=0;i<n;i++) /* für alle n Werte */
 {
  /* Wert zur Summe addieren */
  summe+=wert[i];
 }
/* Mittelwert := Summe / n */
mittel=summe/n;
}
Maximum_suchen()
{
int i;
/* setze Maximum auf ersten Wert */
max=wert[0];
for(i=1;i<n;i++) /* für i von 2 bis n */
 {
  if(wert[i]>max)  /* i-ter Wert größer als Maximum ? */
   {
    /* setze Maximum auf i-ten Wert */
    max=wert[i];
   }
 }
}
main()
{
Meßwerte_einlesen();
Mittelwert_berechnen();
Maximum_suchen();
/* Mittelwert und Maximum ausgeben */
printf("Der Mittelwert ist %d, das Maximum ist %d.\n",mittel,max);
}

Dieses Programm läßt sich dann übersetzen und ausführen.

4.4 Erstellen eines Pascal-Programms

Die Umsetzung des Diagramms in ein PASCAL-Programm verläuft ähnlich. Zunächst wird die Übersetzungstabelle ”Pascal“ geladen und das Diagramm als Text gespeichert:

PROGRAM Meßwerte.p (INPUT,OUTPUT);
PROCEDURE Meßwerte_einlesen;
BEGIN
  REPEAT
    { Anzahl der Meßwerte (=n) einlesen }
  UNTIL bis n>0 und n<=maximale Anzahl;
  FOR für i von 1 bis n DO BEGIN
    { i-ten Meßwert einlesen }
   END;
END;
PROCEDURE Mittelwert_berechnen;
BEGIN
  { Summe auf Null setzen }
  FOR für alle n Werte DO BEGIN
    { Wert zur Summe addieren }
   END;
  { Mittelwert := Summe / n }
END;
PROCEDURE Maximum_suchen;
BEGIN
  { setze Maximum auf ersten Wert }
  FOR für i von 2 bis n DO BEGIN
    IF i-ter Wert größer als Maximum ? THEN
     BEGIN
      { setze Maximum auf i-ten Wert }
     END
   END;
END;
{ Hauptprogramm: }
BEGIN
  Meßwerte_einlesen;
  Mittelwert_berechnen;

  Maximum_suchen;
  { Mittelwert und Maximum ausgeben }
END.

Daraus läßt sich dann folgendes Pascal-Programm erstellen:

PROGRAM Messwerte (INPUT,OUTPUT);
CONST MAX_N=50;   { Maximal 50 Werte erlaubt }
VAR n,mittel,max : INTEGER;   { n=Anzahl der Werte, Mittelwert und Maximum }
    wert : ARRAY[1..MAX_N] OF INTEGER;

PROCEDURE Messwerte_einlesen;
VAR i : INTEGER;
BEGIN
  REPEAT
    { Anzahl der Meßwerte (=n) einlesen }
    write('Anzahl der Werte ? ->');
    readln(n);
  UNTIL (n>0) AND (n<=MAX_N);
  FOR i:=1 TO n DO BEGIN
    { i-ten Meßwert einlesen }
    write(i,'. Wert ? ->');
    readln(wert[i]);
  END;
END;
PROCEDURE Mittelwert_berechnen;
VAR summe,i : INTEGER;
BEGIN
  { Summe auf Null setzen }
  summe:=0;
  FOR i:=1 TO n DO BEGIN
    { Wert zur Summe addieren }
    summe:=summe+wert[i];
  END;
  mittel:=summe DIV n;
END;
PROCEDURE Maximum_suchen;

VAR i : INTEGER;
BEGIN
{ setze Maximum auf ersten Wert }
max:=wert[1];
FOR i:=2 TO n DO BEGIN
  IF wert[i]>max THEN
   BEGIN
    { setze Maximum auf i-ten Wert }
    max:=wert[i];
   END
END;
END;
{ Hauptprogramm: }
BEGIN
Messwerte_einlesen;
Mittelwert_berechnen;
Maximum_suchen;
{ Mittelwert und Maximum ausgeben }
writeln('Der Mittelwert ist ',mittel,', das Maximum ist ',max);
END.

50 KAPITEL 4. BEISPIELPROGRAMM: ”MEßWERTE“

Sonstiges

5.1 Titelleisten

In den Titelzeilen des Strux-Fensters und des Bildschirms. auf dem sich das Fenster befindet, stehen noch einige Informationen.

5.1.1 des Fensters

Die Anzeige hängt davon ab, ob das Hauptprogramm oder eine Verfeinerung angezeigt wird:

Hauptprogramm: Es wird die Art der Darstellung angezeigt, also entweder ”Struktogramm“, ”PAP“ oder ”Pseudocode“.

Verfeinerung: Hier wird der Text des Blocks gezeigt, dessen Verfeinerung gerade bearbeitet wird.

5.1.2 des Bildschirms

Hier werden von links nach rechts folgende Informationen angezeigt:

• Zunächst der Programmname ”Strux“, damit man sich besser orientieren kann, wenn mehrere Programme gleichzeitig laufen.

• Der Name des gerade bearbeiteten Projekts (Diagramms). Dies ist der Name, unter dem das Diagramm geladen wurde oder unter dem es zuletzt gespeichert wurde. Dabei wird nur die Speicherung im Strux-Format berücksichtigt.

• Falls man sich im Markierungsmodus befindet, wird ein ”M“ angezeigt. (siehe 3.2.5)

• Sobald ein Diagramm verändert wird, steht ein Sternchen (”∗“) in der Titelzeile.

5.2 Merkmale des Piktogramms

Über die Merkmale (engl. Tooltypes) des Strux-Piktogramms können weitere, selten benötigte Einstellungen gemacht werden. Eine genaue Anleitung, wie Merkmale geändert werden, befindet sich im Workbench-Handbuch. Strux kennt folgende Merkmale:

FILE: Hier kann der Name eines Diagramms angegeben werden, welches dann bei jedem Start von Strux automatisch geöffnet wird.

SETTINGS: Hier kann der Name einer Einstellungsdatei angegeben werden. Beim Start von Strux wird dann statt der Einstellung ”strux.prefs“ diese Einstellung benutzt. Wenn man also seine Einstellungen unter dem Namen ”meine.prefs“ gespeichert hat (siehe 3.9.6) und als Merkmal ”SETTINGS=meine.prefs“ angibt, so werden beim Start von Strux jedesmal diese Einstellungen benutzt.

PUBSCREEN: Hier kann der Name eines Public-Schirms angegeben werden, auf welchem das Strux-Fenster geöffnet wird. Näheres zu Public-Schirmen steht in 3.9.2. Ist der angegebene Public-Schirm nicht vorhanden, so wird das Strux-Fenster auf der Workbench geöffnet.

LANGUAGE: Wird das Merkmal LANGUAGE=english angegeben, so werden sämtliche Programmtexte in englischer Sprache angezeigt. Wird das Merkmal nicht angegeben oder LANGUAGE=deutsch gesetzt, benutzt Strux deutsche Texte.

SPRACHE: Dieses Merkmal ist identisch mit LANGUAGE.

5.3 Aufruf aus der Shell

Das Muster für den Aufruf von der Shell aus erhält man durch Eingabe von ”strux ?“. Es lautet:

FILE,PUBSCREEN/K,SETTINGS/K,LANGUAGE=SPRACHE/K

Dabei haben die Argumente die gleiche Bedeutung wie die Merkmale des Piktogramms. Sie können in beliebiger Reihenfolge angegeben werden.

FILE: Der Name eines Diagramms, welches beim Start von Strux geöffnet werden soll, kann ohne Schlüsselwort angegeben werden, also wird z.B. beim Aufruf von strux mein diagramm Strux gestartet und das Diagramm mit dem Namen ”mein diagramm“ geöffnet.

PUBSCREEN: Hier kann der Name eines Public-Schirms angegeben werden, auf welchem das Strux-Fenster geöffnet wird.

Beispiel: Mit strux PUBSCREEN CygnusEdScreen1 wird Strux gest-

artet und das Strux-Fenster auf dem Bildschirm vom CygnusEd geöffnet. (Natürlich nur, wenn CygnusEd aktiv ist und der Bildschirm vom CygnusEd den Status ”Public“ hat)

SETTINGS: Hier kann der Name einer Einstellungsdatei angegeben werden, die beim Start von Strux benutzt wird. Beispiel: ”strux SETTINGS meine.prefs“ startet Strux und benutzt die Einstellung, welche unter dem Namen ”meine.prefs“ gespeichert wurde (siehe 3.9.6).

LANGUAGE: Wird als Argument LANGUAGE english angegeben, so werden in Strux englische Programmtexte benutzt. Bei LANGUAGE deutsch oder wenn nichts angegeben wird, benutzt Strux deutsche Texte.

SPRACHE: Dieses Schlüsselwort ist identisch mit LANGUAGE.

5.4 Unterstützung

Sollten Fragen oder Probleme auftauchen, welche sich nicht mit diesem Handbuch lösen lassen, können Sie sich an folgende Adresse wenden:

Andreas Günther Alfener Weg 10 33100 Paderborn

Falls Sie Fehler im Programm entdecken oder Verbesserungsvorschläge für Strux haben, können Sie sich (wenn möglich, mit genauer Beschreibung) ebenfalls an obige Adresse wenden. Ideen oder Vorschläge für weitere Programme sind auch immer willkommen.

Sollte Ihre Originaldiskette defekt sein, so senden Sie diese bitte ebenfalls an obige Adresse. Sie bekommen darufhin eine neue Originaldiskette.

Beachten Sie, daß nur registrierte Benutzer Unterstützung erwarten können. Vergessen Sie also nicht, die Registrierungskarte zurückzusenden !

5.5 Lizenzvertrag

Bei Verwendung von Strux erkennen Sie folgende Bedingungen an. Wenn Sie mit den Bedingungen nicht einverstanden sein sollten, geben Sie bitte dieses Handbuch mit der ungeöffneten Diskettenpackung zurück.

Urheberrecht: Das Programm mit sämtlichen Beispielen sowie dieses Handbuch unterliegen dem Urheberrecht. Das Programm sowie das Handbuch dürfen nicht anders als in diesem Vertrag vorgesehen verwendet, in irgendeiner Weise kopiert oder geändert werden.

Lizenz: Sie haben das Recht, Strux auf einem einzelnen Computer zu verwenden. Das Programm sowie dieses Handbuch dürfen nicht geändert und insbesondere dürfen keine Kopien des Programms sowie des Handbuchs an Dritte weitergegeben werden ! Wenn Sie das Programm oder das Handbuch an eine andere Partei weitergeben, verpflichten Sie sich, sämtliche Kopien an diese Partei weiterzugeben oder zu vernichten.

Sicherungskopie: Sie dürfen maximal eine Kopie des Programms für Sicherungszwecke anfertigen.

Haftungsausschluß: Strux wird ohne jegliche Garantie irgendeiner Art bereitgestellt, einschließlich der Garantie der Eignung für einen bestimmten Zweck. Das gesamte Risiko bezüglich der Ergebnisse und der Leistung des Programms wird von Ihnen getragen.

56 KAPITEL 5. SONSTIGES

Anhang A

Amiga-Begriffe

Die folgende Auflistung enthält Übersetzungen der in diesem Handbuch verwendeten allgemein üblichen deutschen Bezeichnungen von Amigaspezifischen Begriffen ins Englische, damit Besitzer englischsprachiger Amiga-Handbücher sich in den Beschreibungen zu Strux zurechtfinden.

Deutsch  Englisch
Ausschneiden  cut
Auto-Rollen  autoscroll
Bildschirm  screen
-modus  screenmode
Dateiauswahlfenster filerequester
Einfügen  paste
Eingabetaste  return key
Kopieren  copy
Merkmale  tooltypes
Piktogramm  icon
Public-Schirm  publicscreen
Rollbalken  scroll bar
Schieberegler  slider
Schließsymbol  close gadget
Schublade  drawer
Standardprogramm default tool
Symbol  gadget
Voreinsteller  preferences
Zeichensatz  font
-auswahlfenster fontrequester
Zwischenspeicher  clipboard

58 ANHANG A. AMIGA-BEGRIFFE

Anhang B

Sinnbilder

Hier ist eine Übersicht der verwendeten Sinnbilder und Schlüsselworter im Pseudcode angegeben. Zu den einzelnen Konstrukten werden jeweils die drei verschiedenen Darstellungsweisen angegeben, und zwar in der Reihenfolge

Struktogramm - PAP - Pseudocode

Aktion

If Then If Then Else

Select Of

While

Repeat Until For Repeat

Repeat Forever Exit Subroutine Program Input Output

Parallel